package main

import (
	"os"
	"fmt"
	"strconv"
	"io"
)

func main()  {
	//1。先读取好源文件，
	//2.创建好目标文件
	//3.创建一个临时文件用来存储上次已经拷贝的数据量
	srcName:="/home/xiaonu/Desktop/t.png"
	destName:="/home/xiaonu/Desktop/t1.png"
	file1,_:=os.Open(srcName)
	file2,_:=os.OpenFile(destName,os.O_WRONLY|os.O_CREATE,os.ModePerm)
	tempName:=destName+"temp.txt"
	file3,_:=os.OpenFile(tempName,os.O_RDWR|os.O_CREATE,os.ModePerm)
	fmt.Println(file1,file2,file3)

	//4.从临时文件中读取已经存储的上次的拷贝的数据量
	totalBytes:=make([]byte,100) //读取前创建一个切片数组用来存数据 100个0
	count1,_:=file3.Read(totalBytes)// 在临时文件中读取出有几个字节
	totalStr:=string(totalBytes[:count1])//取出来文件里的所有数字,必须转成字符，要不显示[51 48 48 48]
	total,_:=strconv.Atoi(totalStr) //将读取到的数据转成int,写文件的时候需要用int64
	//fmt.Println(total)
	//５．设置读写的位置
	file1.Seek(int64(total),0) //源文件上次读写的位置
	file2.Seek(int64(total),0)//目标文件上次读写的位置　
	//继续接上次的读取源文件
	dataBytes:=make([]byte,1024) //设置每次最大读取多少字母
	for{
		count2,err:=file1.Read(dataBytes)//按设置读取一次1024字节
		//if err==io.EOF{//判断是否读取文件末尾了
		//	fmt.Println("已经复制到文件末尾",total)
		//	file3.Close()//关闭文件
		//	os.Remove(tempName)//删除临时文件
		//	break//退出循环
		//}
		file2.Write(dataBytes[:count2]) //把读到的内容写入到destname中
		total+=count2
		file3.Seek(0,0)
		totalStr=strconv.Itoa(total)
		file3.WriteString(totalStr)
	}


}